package ahblue.cn.tanzi.jmessage;

import android.content.Intent;
import android.util.Log;

import java.io.File;

import ahblue.cn.tanzi.TanZiApplication;
import ahblue.cn.tanzi.jmessage.im.database.UserEntry;
import ahblue.cn.tanzi.jmessage.im.util.SharePreferenceManager;
import ahblue.cn.tanzi.jmessage.im.util.ThreadUtil;
import ahblue.cn.tanzi.jmessage.im.util.ToastUtil;
import cn.jpush.im.android.api.JMessageClient;
import cn.jpush.im.android.api.callback.GetUserInfoCallback;
import cn.jpush.im.android.api.model.UserInfo;
import cn.jpush.im.android.api.options.RegisterOptionalUserInfo;
import cn.jpush.im.api.BasicCallback;

/**
 * @author pink-jackstraw
 * @date 2018/11/27
 * @describe
 */
public class JMessageManage {

    public static String TAG = "JMessageManage";
    public static String appKey = "e130192c53bc9d6d0d58509b";
    public static String userName = "fengdongfei";
    public static String pwd = "123456";

    // 检测是否登录
    public static boolean checkLogin() {
        //检测账号是否登陆
        UserInfo myInfo = JMessageClient.getMyInfo();
        if (myInfo == null) {
            return false;
        }
        return true;
    }

    public static void updateNiceName(String nick){
        UserInfo myInfo = JMessageClient.getMyInfo();
        if (myInfo != null) {
            myInfo.setNickname(nick);
        }
        JMessageClient.updateMyInfo(UserInfo.Field.nickname, myInfo, new BasicCallback() {
            @Override
            public void gotResult(int i, String s) {
                if (i == 0) {
//                    mTv_updateInfo.append("更新nickname成功" + "\n");
                    Log.i("UpdateUserInfoActivity", "updateNickName," + " responseCode = " + i + "; desc = " + s);
                } else {
//                    mTv_updateInfo.append("更新nickname失败" + "\n");
                    Log.i("UpdateUserInfoActivity", "updateNickName," + " responseCode = " + i + "; desc = " + s);
                }
            }
        });
    }

    // 极光登录
    public static void login(String member_id, String invite_code) {
        JMessageClient.login(member_id, invite_code, new BasicCallback() {
            @Override
            public void gotResult(int responseCode, String s) {
                Log.e(TAG, "login: " + responseCode + "  " + s + "  " + member_id + "  " + invite_code);
                if (responseCode == 0) {
                    SharePreferenceManager.setCachedPsw(invite_code);
                    UserInfo myInfo = JMessageClient.getMyInfo();
                    File avatarFile = myInfo.getAvatarFile();



                    //登陆成功,如果用户有头像就把头像存起来,没有就设置null
                    if (avatarFile != null) {
                        SharePreferenceManager.setCachedAvatarPath(avatarFile.getAbsolutePath());
                    } else {
                        SharePreferenceManager.setCachedAvatarPath(null);
                    }
                    String username = myInfo.getUserName();
                    String appKey = myInfo.getAppKey();
                    UserEntry user = UserEntry.getUser(username, appKey);
                    if (null == user) {
                        user = new UserEntry(username, appKey);
                        user.save();
                    }

                } else if (responseCode == 801003) {
                    regist(member_id, invite_code, null);
                } else {

                }
            }
        });



    }

    // 极光注册
    public static void regist(String member_id, String invite_code, registerResult listener) {
        // 参数1： 用户名  参数二： 密码 参数三： 注册时的用户其他信息  参数4：结果回调
        // 0代表success
        JMessageClient.register(member_id, invite_code, new RegisterOptionalUserInfo(), new BasicCallback() {
            @Override
            public void gotResult(int i, String s) {
                Log.e(TAG, "regist: " + i + "  " + s);
                if (i == 0) {
                    SharePreferenceManager.setRegisterName(member_id);
                    SharePreferenceManager.setRegistePass(invite_code);
                    if (null != listener) {
                        listener.success(true);
                    }
                } else {
                    if (null != listener) {
                        listener.success(true);
                    }
                }
            }
        });
    }

    public interface registerResult {
        void success(boolean ok);
    }

    // 极光退出
    public static void quit() {
        UserInfo info = JMessageClient.getMyInfo();
        if (null != info) {
            SharePreferenceManager.setCachedUsername(info.getUserName());
            if (info.getAvatarFile() != null) {
                SharePreferenceManager.setCachedAvatarPath(info.getAvatarFile().getAbsolutePath());
            }
            JMessageClient.logout();
        } else {
//            ToastUtil.shortToast(TanZiApplication.getContext(), "退出失败");
        }
    }

    //获取用户信息
    public void getJpushUserInfo() {

        JMessageClient.getUserInfo(userName, appKey, new GetUserInfoCallback() {
            @Override
            public void gotResult(int i, String s, UserInfo userInfo) {
                Log.e(TAG, "getUserInfo: " + i + "  " + s);
            }
        });
    }

    //获取当前登录账号的用户信息
    public static void getMeInfo() {
        UserInfo info = JMessageClient.getMyInfo();
    }

    //更新当前已登录用户的用户信息
    //UserInfo.Field updateField 枚举类型，表示需要更新的用户信息字段。包括：
    //nickname 昵称
    //birthday 生日
    //signature 签名
    //gender 性别
    //region 地区
    //address 地址
    //all 以上全部
    //UserInfo userInfo 待更新的用户信息（对象）。SDK将根据field参数来判断需要将哪个属性更新到服务器上去。
    //BasicCallback callback 结果回调
    public void setTAGupdateInfo() {
        JMessageClient.updateMyInfo(null, null, new BasicCallback() {
            @Override
            public void gotResult(int i, String s) {

            }
        });
    }

    //更新用户密码
    public void updatePwd() {
//        JMessageClient.updateUserPassword(String oldPassword, String newPassword, BasicCallback callback);
    }

    //更新用户头像
    //File avatar 用户头像文件
    //BasicCallback callback 结果回调
    public void updateAvatar() {
//        JMessageClient.updateUserAvatar(File avatar, BasicCallback callback);
    }

    /*

    黑名单管理

可以将对方用户加入到“黑名单”列表中，加入之后，我方依然能给对方发消息，但是对方给我发消息时会返回指定错误码，发送消息失败。
将用户加入黑名单

JMessageClient.addUsersToBlacklist(List<String> usernames, BasicCallback callback)
参数说明
List usernames 被加入黑名单的用户username列表
BasicCallback callback 回调接口
     */

    /*
    将用户移出黑名单

JMessageClient.delUsersFromBlacklist(List<String> usernames, BasicCallback callback)
参数说明
List usernames 被移出黑名单的用户username列表
BasicCallback callback 回调接口
     */

    /*
    获取被当前用户加入黑名单的用户列表

JMessageClient.getBlacklist(GetBlacklistCallback callback)
参数说明
GetBlacklistCallback 获取黑名单回调接口
回调
  public abstract void gotResult(int responseCode,
    String responseMessage, List<UserInfo> userInfos);
List<UserInfo> userInfos 被拉入黑名单的用户的UserInfo
     */

    /*
    获取通知栏展示类型

Since 2.2.0
JMessageClient.getNotificationFlag();
返回
int 当前设置的通知栏的展示类型。
     */

    /*
    通知栏点击事件监听

用户可以通过接受通知栏点击事件NotificationClickEvent，来实现自定义跳转，该事件如果没有接收者，点击通知栏时SDK将默认跳转到程序主界面。
事件接收方法见事件处理一节
     */

    /*
    进入单聊会话

UI层在进入聊天会话界面时调用，设置当前正在聊天的对象，调用此接口之后，收到对应用户发来的消息时，sdk不会弹出通知栏提示。
同时还会清掉与该聊天对象会话的未读消息数，以及通知栏通知。
此接口传入的数据采用覆盖逻辑，后面传入的参数会覆盖掉之前的设置。
JMessageClient.enterSingleConversation(String username,String appKey)
参数定义
String username 单聊聊天对象的username
String appKey 聊天对象所属appKey，若appkey为空则默认填充本应用的appkey
     */

    /*
    进入群聊会话

UI层在进入聊天会话界面时调用，设置当前正在聊天的对象，调用此接口之后，收到对应群组中发来的消息时，sdk不会弹出通知栏提示。
同时还会清掉与该聊天对象会话的未读消息数，以及通知栏通知。
此接口传入的数据采用覆盖逻辑，后面传入的参数会覆盖掉之前的设置。
JMessageClient.enterGroupConversation(long groupID)
参数定义
long groupID 群聊聊天对象的群ID
     */

    /*
    退出会话

退出会话。UI层在退出聊天会话界面时调用，清除当前正在聊天的对象，之后收到对应的用户或群组发来的消息时，会正常展示通知栏通知。
JMessageClient.exitConversation();
     */

    /*
    免打扰设置

可以将用户/群组添加到“免打扰”列表中，收到免打扰用户/群组发过来的消息时，sdk不会弹出默认的通知提示，但消息事件照常下发。
获取免打扰列表

JMessageClient.getNoDisturblist(GetNoDisurbListCallback callback)
参数定义
GetNoDisurbListCallback callback 回调接口。
设置普通免打扰

见api doc中UserInfo和GroupInfo相关接口
设置全局免打扰

设置全局免打扰之后，收到所有消息都将不会有通知栏通知，效果类似
JMessageClient.setNotificationFlag(JMessageClient.FLAG_NOTIFY_DISABLE)，但是此设置在用户换设备之后也会生效。
JMessageClient.setNoDisturbGlobal(int noDisturbGlobal, BasicCallback callback)
参数定义
int noDisturbGlobal 全局免打扰标志，1表示设置，其他表示取消设置。
BasicCallback callback 回调接口
获取全局免打扰标识

JMessageClient.getNoDisturbGlobal(IntegerCallback callback)
参数定义
IntegerCallback callback 回调接口。
     */
}
